#ifndef __GAUGEMETRICSBUILDER_HPP__
#define __GAUGEMETRICSBUILDER_HPP__

#include <string>
#include <map>

#include "metrics/Gauge.hpp"
#include "metrics/Builder.hpp"

namespace metrics
{
    template <typename T>
    class Family;
    class MetricRegistry;

    class GaugeMetricsBuilder : public Builder<Gauge>
    {
    public:
        GaugeMetricsBuilder();
        GaugeMetricsBuilder(const std::string &name, const std::string &help, const std::map<std::string, std::string> &labels);
        virtual ~GaugeMetricsBuilder();

        virtual GaugeMetricsBuilder &name(const std::string &name);
        virtual GaugeMetricsBuilder &help(const std::string &help);
        virtual GaugeMetricsBuilder &labels(const std::map<std::string, std::string> &labels);
        /**
         * @brief 注册
         * 
         * @param registry
         * @return std::shared_ptr<Family<Gauge>> cpu和meme的metric family
         */
        virtual std::shared_ptr<Family<Gauge>> metric_register(std::shared_ptr<MetricRegistry> registry);
    };

} // namespace metrics

#endif // __GAUGEMETRICSBUILDER_HPP__